iT邦幫忙

2024 iThome 鐵人賽

DAY 1
0
Python

Python 數值與數學模組介紹與應用系列 第 1

Day01.01. numbers — 數值抽象基類

  • 分享至 

  • xImage
  •  

Python 數值與數學模組

01. numbers — 數值抽象基類

Python 的 numbers 模組提供了數值抽象基類(ABCs),這些基類定義了數值類型的階層結構。這些抽象基類可以用來判斷一個對象是否符合某些數值類型的標準,並且對於需要處理多種數值類型的代碼尤為有用。

數值塔

數值塔(Numerical Tower)是 numbers 模組中的一個概念,它將數值類型按層次結構組織起來。這個層次結構從最基礎的 Number 類開始,逐漸細化為 ComplexRealRationalIntegral 類。

  • Number

    • 最頂層的抽象基類,所有數值類型的基礎。
  • Complex

    • 繼承自 Number,表示複數。擁有 realimag 屬性,以及 conjugate() 方法。
  • Real

    • 繼承自 Complex,表示實數。支持所有實數運算。
  • Rational

    • 繼承自 Real,表示有理數。擁有 numeratordenominator 屬性。
  • Integral

    • 繼承自 Rational,表示整數。支持所有整數運算。

類型實現者的備註

對於實現自定義數值類型的開發者來說,需要注意以下幾點:

  • 確保你的類型正確實現了所需的抽象基類中的方法和屬性。
  • 使用 isinstance 函數檢查對象是否屬於某個數值類型,以確保類型安全。
  • 在實現數值類型時,可以根據需要覆蓋或擴展基類的方法。

添加更多數值ABC

numbers 模組中,你可以根據需要添加更多的數值抽象基類。這些自定義的抽象基類可以繼承自現有的基類,並添加額外的方法或屬性。

  • Example:
    from numbers import Real
    
    class MyReal(Real):
        def __init__(self, value):
            self.value = value
    
        def __add__(self, other):
            return MyReal(self.value + other.value)
    
        def __sub__(self, other):
            return MyReal(self.value - other.value)
    
        def __mul__(self, other):
            return MyReal(self.value * other.value)
    
        def __truediv__(self, other):
            return MyReal(self.value / other.value)
    
        def __float__(self):
            return float(self.value)
    

實現算術運算

實現數值類型時,最重要的部分之一是算術運算的實現。Python 提供了特殊方法(如 __add____sub____mul__ 等)來支持算術運算符的重載。

  • 加法 (add):

    • 定義加法運算符 + 的行為。
    def __add__(self, other):
        return MyReal(self.value + other.value)
    
  • 減法 (sub):

    • 定義減法運算符 - 的行為。
    def __sub__(self, other):
        return MyReal(self.value - other.value)
    
  • 乘法 (mul):

    • 定義乘法運算符 * 的行為。
    def __mul__(self, other):
        return MyReal(self.value * other.value)
    
  • 除法 (truediv):

    • 定義除法運算符 / 的行為。
    def __truediv__(self, other):
        return MyReal(self.value / other.value)
    

通過實現這些方法,你可以確保你的自定義數值類型能夠與內置數值類型進行無縫交互,並且支持標準的算術運算。

上述是對 numbers 模組的概述,涵蓋了數值塔、類型實現者的注意事項、添加更多數值ABC 以及實現算術運算的基本步驟。通過這些知識,你可以更好地理解和擴展 Python 的數值處理能力。


下一篇
Day02.02.math — 數學函數1
系列文
Python 數值與數學模組介紹與應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言